// AGENTE QUE REPRESENTA A LOS SENSORES QUE CONTROLAN LA CASA

package jadess;

import jade.core.Agent;
import jade.core.behaviours.*;
import jade.core.AID;

import jade.lang.acl.ACLMessage;

import java.util.Random;

public class Sensores extends Agent{
	
	//SENSORES DE LA CASA
	
	// 0 si la vivienda est� vac�a, 1 si hay alguien dentro.
	// (vivienda vacia) || (vivienda ocupada)
	private int vivienda;
	
	// 0 si la puerta de la entrada cerrada, 1 si est� abierta.
	// (puerta cerrada) || (puerta abierta)
	private int puerta;

	// 0 si la alarma est� desconectada, 1 si est� conectada.
	// (alarma desconectada) || (alarma conectada)
	private int alarma;
	
	// Variable que representa la temperatura de la casa. 
	// La temperatura que se quiere conseguir es de 20 grados.
	private int temperatura;
	
	// 0 si las luces est�n apagadas, 1 si est�n encendidas.
	// (luz apagada) || (luz encendida)
	private int luz;
	
	// 0 si el horno est� apagado, 1 si est� encendido.
	// (horno apagado) || (horno encendido)
	private int horno;

	// 0 si la puerta del horno cerrada, 1 si est� abierta.
	// (puerta-horno cerrada) || (puerta-horno abierta)
	private int puerta_horno;
	
	// 0 si la puerta de la nevera cerrada, 1 si est� abierta.
	// (puerta-nevera cerrada) || (puerta-nevera abierta)
	private int puerta_nevera;

	// 0 si la nevera est� apagada, 1 si est� encendida.
	// (nevera apagada) || (nevera encendida)
	private int nevera;


	protected void setup(){
		
		addBehaviour(new controlSensores());
		
	}
	
	// Este comportamiento es el que recibe los cambios en los sensores.
	// Est� simulado por un Random que selecciona el sensor y otro Random 
	// que selecciona el nuevo valor del sensor.
	class controlSensores extends CyclicBehaviour {
			
		public void action() {
			
						
			String hecho = "";
			Random r = new Random();
				
			// Selecciona el sensor y la opci�n.
			int sensor = r.nextInt(9);
			int opcion = r.nextInt(2);
				
			switch(sensor){
				case 0: 
					if(opcion == 0)  hecho = "vivienda vacia";	
					if(opcion == 1)  hecho = "vivienda ocupada";		
					System.out.println(hecho);
					break;
					
				case 1: 
					if(opcion == 0)  hecho = "puerta cerrada";					 
					if(opcion == 1)  hecho = "puerta abierta";						
					System.out.println(hecho);
					break;
					
				case 2: 
					if(opcion == 0)  hecho = "alarma desconectada";	
					if(opcion == 1)  hecho = "alarma conectada";	
					System.out.println(hecho);
					break;
					
				case 3: 
					if(opcion == 0)  hecho = "bajar temperatura";		
					if(opcion == 1)  hecho = "subir temperatura";
					System.out.println(hecho);
					break;
					
				case 4: 
					if(opcion == 0)  hecho = "luz apagada";	
					if(opcion == 1)  hecho = "luz encendida";	
					System.out.println(hecho);
					break;
					
				case 5: 
					if(opcion == 0)  hecho = "horno apagado";	
					if(opcion == 1)  hecho = "horno encendido";	
					System.out.println(hecho);
					break;
					
				case 6: 
					if(opcion == 0)  hecho = "puerta-horno cerrada";	
					if(opcion == 1)  hecho = "puerta-horno abierta";	
					System.out.println(hecho);
					break;
					
				case 7: 
					if(opcion == 0)  hecho = "nevera apagada";	
					if(opcion == 1)  hecho = "nevera encendida";	
					System.out.println(hecho);
					break;
					
				case 8: 
					if(opcion == 0)  hecho = "puerta-nevera cerrada";	
					if(opcion == 1)  hecho = "puerta-nevera abierta";	
					System.out.println(hecho);
					break;	
			}
			
			// Env�a la informaci�n al controlador mediante un mensaje ACL.
			if(!hecho.equals("")){
				ACLMessage msg=new ACLMessage(ACLMessage.INFORM);
	            msg.addReceiver(new AID("controlador",AID.ISLOCALNAME));
	            msg.setContent(hecho);
	            myAgent.send(msg);
			}
           
           // La informaci�n de los sensores se comprueba cada 5 segundos.
			block(1000);
		}
	}


}